#include "conversorunidades.h"
#include "matematicas.h"

ConversorUnidades::ConversorUnidades(const QRectF& encuadreReal, const QRect& encuadrePixeles)
{
	this->encuadreReal = encuadreReal;
	this->encuadrePixeles = encuadrePixeles;
}

int ConversorUnidades::dimensionXRealAPixeles(double dimensionXReal)
{
    return round(dimensionXReal * encuadrePixeles.width() / encuadreReal.width());
}

int ConversorUnidades::dimensionYRealAPixeles(double dimensionYReal)
{
    return round(dimensionYReal * encuadrePixeles.height() / encuadreReal.height());
}

double ConversorUnidades::dimensionXPixelesAReal(int dimensionXPixeles)
{
     return dimensionXPixeles * encuadreReal.width() / encuadrePixeles.width();
}

double ConversorUnidades::dimensionYPixelesAReal(int dimensionYPixeles)
{
    return dimensionYPixeles * encuadreReal.height() / encuadrePixeles.height();
}

double ConversorUnidades::coordenadaXPixelesAReal(int xPixeles)
{
    return encuadreReal.left() + dimensionXPixelesAReal(xPixeles - encuadrePixeles.x());
}

double ConversorUnidades::coordenadaYPixelesAReal(int yPixeles)
{
    return encuadreReal.bottom() - dimensionYPixelesAReal(yPixeles - encuadrePixeles.y());
}

QPointF ConversorUnidades::puntoPixelesAReal(QPoint puntoPixeles)
{
    double xReal = coordenadaXPixelesAReal(puntoPixeles.x());
        //encuadreReal.left() + dimensionXPixelesAReal(puntoPixeles.x() - encuadrePixeles.x());
    double yReal = coordenadaYPixelesAReal(puntoPixeles.y());
        //encuadreReal.bottom() - dimensionYPixelesAReal(puntoPixeles.y() - encuadrePixeles.y());
	return QPointF(xReal, yReal);
}

QRectF ConversorUnidades::rectanguloPixelesAReal(QRect rectanguloPixeles)
{
	QPointF origenReal = puntoPixelesAReal(QPoint(rectanguloPixeles.left(), rectanguloPixeles.bottom() + 1));
    double anchoReal = dimensionXPixelesAReal(rectanguloPixeles.width());
    double altoReal = dimensionYPixelesAReal(rectanguloPixeles.height());

    if (anchoReal < 0) {
         int a = 1;
    }

    return QRectF(origenReal, QSizeF(anchoReal, altoReal));
}

int ConversorUnidades::coordenadaXRealAPixeles(double xReal)
{
    return encuadrePixeles.x() + dimensionXRealAPixeles(xReal - encuadreReal.left());
}

int ConversorUnidades::coordenadaYRealAPixeles(double yReal)
{
    return encuadrePixeles.y() + dimensionYRealAPixeles(encuadreReal.bottom() - yReal);
}

QPoint ConversorUnidades::puntoRealAPixeles(QPointF puntoReal)
{
    double xPixeles = coordenadaXRealAPixeles(puntoReal.x());
        //encuadrePixeles.x() + dimensionXRealAPixeles(puntoReal.x() - encuadreReal.left());
    double yPixeles = coordenadaYRealAPixeles(puntoReal.y());
        //encuadrePixeles.y() + dimensionYRealAPixeles(encuadreReal.bottom() - puntoReal.y());
	return QPoint(xPixeles, yPixeles);
}

QRect ConversorUnidades::rectanguloRealAPixeles(QRectF rectanguloReal)
{
	QPoint origenPixeles = puntoRealAPixeles(rectanguloReal.bottomLeft());
    int anchoPixeles = dimensionXRealAPixeles(rectanguloReal.width());
    int altoPixeles = dimensionYRealAPixeles(rectanguloReal.height());

	return QRect(origenPixeles, QSize(anchoPixeles, altoPixeles));
}

